#include<stdio.h>
#include<unistd.h>
#include<string.h>
#include<sys/types.h>
#include<sys/wait.h>

#define MAX_CMD 124
int main()
{
  const char * touch="[MYSHELL@pwd]"; //页面视图

  //数据缓冲
  char command[MAX_CMD]={0};
  while(1)
  {
    //打印页面
    printf("%s",touch);
    fflush(stdout);
    //从stdout获取数据
    //scanf("%s",command); 不能用scanf读取数据，因为，scanf遇空格会只获取空格前的
    if(fgets(command,sizeof(command),stdin))
    {
      command[strlen(command)-1]='\0';  //fgets会读取回车，所以要多减一下
      pid_t pid =fork(); 
      if(pid<0)
      {
         perror("fork");
         return -1;
      }
      else if(pid==0)
      {
         //child
        char *  argv[MAX_CMD]={NULL}; 
        int i=0;
        //分隔参数
        argv[i]=strtok(command," ");
        while(argv[i])
        {
          argv[++i]=strtok(NULL," ");
        }
         
        //区分命令
        
        //a. 内建命令
        if(strcmp(argv[0],"cd")==0&&(chdir(argv[1])==0))
        {
          continue;
        }
        //判断是否程序替换成功
        if(execvp(argv[0],argv)==-1)
        {
          //替换失败
          printf("Please Use sccussful command,you can use man for help\n");
          return 1;
        }
      }
        else{
          //father
          wait(NULL);
       }

     }
    
  }  //出循环
    return 0;
 }

